package com.link.base.base.product.dao.mybatis.mapper;

import com.link.base.base.product.model.PriceListItem;
import com.link.base.base.product.model.Product;
import com.link.base.basic.model.ListOfValue;
import com.link.core.basic.dao.mapper.BasicMapper;

import java.util.List;

/**
 * @author unknown
 * @date unknown
 * @comments 产品操作
 */
public interface ProductMapper extends BasicMapper<Product> {

    /**
     * 查找商机下未选择的产品
     *
     * @param record
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryUnSelectedInOptyPage(Product record) throws Exception;

    /**
     * 添加产品图片
     *
     * @param record
     * @throws Exception
     */
    public void productImageUpdate(Product record) throws Exception;

    /**
     * 更新产品的型号
     *
     * @param record
     * @throws Exception
     */
    public void prodModelUpdate(Product record) throws Exception;

    /**
     * 更新产品的详细信息
     *
     * @param record 产品
     * @throws Exception
     */
    public void prodDetailsUpdate(Product record) throws Exception;

    /**
     * 订单-产品产品MVG：创建订单时选产品，产品MVG窗口中未选择的产品列表
     *
     * @param record 产品
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryProdOrderlistPage(Product record) throws Exception;

    /**
     * 查询产品及指定客户下的价格
     *
     * @param record 产品
     * @return 产品列表
     */
    public List<Product> queryProdWithAcctPricePage(Product record);

    /**
     * 查询单条产品及指定客户下的价格
     *
     * @param record 产品
     * @return 产品
     */
    public Product queryProdWithAcctPriceById(Product record);

    /**
     * 查询单条产品及指定客户下的价格
     *
     * @param record 产品
     * @return 产品列表
     */
    public List<Product> queryProdWithAcctPriceByCodeOrName(Product record);

    /**
     * 根据促销政策头ID查询符合符合条件的产品
     *
     * @param record 产品
     * @return 产品列表
     */
    public List<Product> queryProdWithAcctPriceByPcyId(Product record);

    /**
     * <p>根据促销政策结果id查询符合条件的产品，attr1</p>
     * @author yrf
     * @param record
     * @return 产品列表
     */
    public List<Product> queryProdWithAcctPriceByPcyResultIdPage(Product record);


    /**
     * 根据价格头查询未选择的产品
     *
     * @param priceListItem 价格头
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryUnSelectedInPriceListDetailPage(PriceListItem priceListItem) throws Exception;


    /**
     * 根据价格头查询未选择的产品
     *
     * @param priceListItem 价格头
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryProductByPriceHeadIdPage(PriceListItem priceListItem) throws Exception;

    /**
     * 多价格表下，查询产品价格
     *
     * @param record
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryPromoPriceByProduct(Product record) throws Exception;


    /**
     * 查询经销商的销售价格头下未选择的产品
     *
     * @author heqiqian
     * @param record
     * @return 产品列表
     * @throws Exception
     * @date 2018年5月16日
     */
    public List<Product> queryUnSelectedInDealerPriceListPage(Product record) throws Exception;

    /**
     * 查询经销商的要货计划单下未选择的产品
     * @author weixuan
     * @param record
     * @return 产品列表
     * @throws Exception
     * @date 2018年12月6日
     */
    public List<Product> queryUnSelectedInPurchasePlanListPage(Product record) throws Exception;

    /**
     * 查询单条产品及指定客户下的价格
     *
     * @author heqiqian
     * @param t
     * @return 产品列表
     * @throws Exception
     * @date 2018年5月16日
     */
    public List<Product> queryProductWithAcctPricePage(Product t) throws Exception;

    /**
     * 根据查询产品及指定客户查品牌/系列
     *
     * @param record
     * @return List ListOfValue
     * @throws Exception author 刘鲁
     */
    List<ListOfValue> queryBrandList(Product record) throws Exception;

    /**
     * 根据查询热销产品
     *
     * @param entity
     * @return List ListOfValue
     * @throws Exception author 刘鲁
     */
    public List<Product> queryHotProduct(Product entity) throws Exception;

    /**
     * 查询不同类别产品的第一条 by lizt 20170703
     *
     * @param entity
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryProductByType(Product entity) throws Exception;

    /**
     * 使用于php调用的queryById方法
     *
     * @param entity
     * @return 产品
     * @throws Exception
     */
    public Product queryByIdForShare(Product entity) throws Exception;

    /**
     * 查询产品系列 且去除重复项 用于筛选
     *
     * @param record
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryProdMatSeries(Product record) throws Exception;

    /**
     * 按照创建时间,查询维护了二级系列的产品的第一条数据
     *
     * @param record
     * @return 产品列表
     * @throws Exception
     */
    public List<Product> queryProdSecSeries(Product record) throws Exception;


    /**
     * 根据订单行上的产品,获取销售数量最高的5个产品
     *
     * @param record 产品信息
     * @return 产品列表
     * @throws Exception 异常信息
     */
    public List<Product> queryHotProductByOrder(Product record) throws Exception;

    /**
     * 查询分类下有产品的一级分类
     *
     * @param record
     * @return 产品列表
     * @throws Exception 异常信息
     */
    public List<Product> queryHasProdMatSeries(Product record) throws Exception;

    /**
     * 查询小程序排序前9的三级系列
     *
     * @author KuangRuifeng
     * @param record
     * @return 三级系列
     * @throws Exception 异常信息
     */
    List<Product> queryHotThdSeries(Product record) throws Exception;

    /**
     * 更改产品销量
     *
     * @param product
     * @throws Exception
     */
    void updateCumulateSale(Product product) throws Exception;

    /**
     * 修改浏览次数
     *
     * @param prod
     * @throws Exception
     */

    void updateViewNum(Product prod) throws Exception;

    /**
     * 根据id查询品牌系列信息
     * @author KuangRuifeng
     * @date 2019/1/8
     * @param product 查询参数
     * @return 查询结果
     * @throws Exception 异常信息
     */
    Product queryBrandSeriesById(Product product) throws Exception;


    /**
     * 查询导购助手产品案例关联产品
     *
     * @author lujiang
     * @param record
     * @return
     * @throws Exception 异常信息
     */
    List<Product> queryRightListPage(Product record) throws Exception;


    /**
     *根据组织ID 获取价格表然后获取价格表下的产品
     * @author 黄正杨
     * @date 2019/4/23
     * @param product
     * @return List
     * @throws Exception
     */
    List<Product> queryByOrgIdPage(Product product) throws Exception;

}

